home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / fido / RFS275.lha / rexx / RFSfileguide.rexx < prev    next >
OS/2 REXX Batch file  |  1995-02-06  |  10KB  |  300 lines

  1. /**/
  2. v="$VER: RFSFileGuide  Rexx FileGuide Creator Williamson 54.10"
  3. debug=0
  4. system="Amiga ECS"              /* Your system name and address here */
  5. site="FIDONET#1:167/104.0"
  6. listnote="Available files Guide, updated "date()" MAGIC: FILESG"
  7. default="  Sorry, there is no description for this area"||cr||cr
  8. /*          ^^ spaces required! */
  9. /*  You must create these files */
  10. bbslist="CFG:Browse.CFG"    /* filearea config  */
  11. htext="CFG:ABOUT.txt"  /* System header */
  12. areatext='area.text'            /* area description */
  13. /* output files - edit names to suit */
  14. /*allfileslist="MAIL:filelistS/01670104.guide"    /* Output File List */  */
  15. allfileslist="T:01670104.guide"    /* Output File List */
  16. allfilesarc ="MAIL:filelists/AG167104.LHA"    /* Archived Normal List */
  17. filesbbs ="files.bbs"           /* area desc and files */
  18. /* WB2 List Lformat parameters  */
  19. EXCLUDE='~(area.text|files.bbs|LZTEMP.#?|.info)'    /* LIST exclusion parameters    */
  20. LFMT_LIST='"%-20N%7L %-9D %C"'  /* all files list   */
  21. LFMT_BBS='"%-30N %C"'           /* areas.bbs        */
  22. FLLEN=77                        /* list line length  */
  23. MARGINALL=39                    /* margin for LFMT_LIST  - wraptofile prepends a space  */
  24. /* used internally */
  25. fileslist="T:ALST-"Pragma('ID')      /* temporary all file */
  26. tmpbbs="T:MLST-"Pragma('ID')         /* temporary area list */
  27. script="RFSFileGuide";ver="v"||right(v,5);fmvers=script ver
  28. cr='0a'x;lf='0a'x
  29. CSI='9b'x;AOFF=CSI||'0m';BOLD=CSI||'1m';ULINE=CSI||'4m';ITALICS=CSI||'3;40m'
  30. parse var site d '#' z ':' n '/' f '.' p
  31. reqfile='OUTBOUND:'z'.'n'.'f'.'p'.REQ'
  32. if ~show("L", "rexxsupport.library") then
  33.     if ~addlib("rexxsupport.library", 0, -30, 0) then do
  34.             say "Couldn't access support.library !"
  35.             exit 20
  36.     end
  37.  
  38. options results
  39. options failat 20
  40. signal on halt
  41. signal on ioerr
  42. signal on break_c
  43. signal on break_d
  44.  
  45. call close('STDOUT');call open('STDOUT',"CON:0/10/640/100/"script ver"/CLOSE",'w')
  46. call close('STDIN');call open('STDIN','*','R')
  47. call Pragma("P",-1)
  48.  
  49. /* Start Area Processing */
  50. if ~open('dlst',bbslist, 'R') then do
  51.     call writeln(STDOUT, "Couldn't open fileareas list" bbslist)
  52.     signal cleanup
  53. end
  54. if show('p',"ROOFLOG") then address 'ROOFLOG' 'logline' left(time(),5) script': Updating FILE Listing'
  55. call writeln(STDOUT, lf||ITALICS||" "fmvers||lf||" by Robert Williamson 1:167/104.0@fidonet"||AOFF)
  56. /* Start Area Processing */
  57. call writeln(STDOUT, 'Reading file area configuration')
  58. area=1
  59. do while ~eof('dlst')
  60.     call writech(STDOUT,'.')
  61.     blstln=readln('dlst')
  62.     if blstln="" then iterate
  63.     parse var blstln Number.area '"' Path.area '"' '"' Name.area '"'
  64.     if upper(strip(dequote(Path.area)))="NULL:" then iterate
  65.     area=area+1
  66. end /*eof*/
  67. call close('dlst')
  68.  
  69. areas=area-1
  70. call writeln(STDOUT,lf'Found 'areas' file areas')
  71.  
  72. /* open all file listing, put title, date and system header */
  73. call writeln(STDOUT,ULINE||"Generating AmigaGuide Files Listing for "system||AOFF||cr)
  74. if debug then call writeln(STDOUT,'Adding date/version header to 'fileslist)
  75.  
  76. gbuf=""
  77. gbuf=gbuf'@DataBase 'system' AmigaGuide Listing'cr
  78. gbuf=gbuf'@Node Main "About 'system' and AmigaGuide Listing"'cr||cr
  79. gbuf=gbuf" "fmvers" by Robert Williamson 1:167/104.0@fidonet"cr
  80. gbuf=gbuf" guidelisting for" system  delstr(space(date(), 1, "-"), 8, 2) time()||cr||cr
  81. gbuf=gbuf' @{"About 'system' and this Guide" link ABOUT}'cr
  82. gbuf=gbuf' @{"File Areas" link AREAS}'cr
  83. gbuf=gbuf' @{"File Requests" link REQS}'cr'@EndNode'cr||cr
  84.  
  85. gbuf=gbuf'@Node REQS "File Requests"'cr||cr
  86. gbuf=gbuf'Clicking on a filename gadget will cause that file name to be written or'cr
  87. gbuf=gbuf'appended to a REQ file. The REQ file will be placed in the Assigned OUTBOUND:,'cr
  88. gbuf=gbuf'with the filename 'reqfile'. If the Assign OUTBOUND: does not exist, you will get'cr
  89. gbuf=gbuf'a "Please Insert Volume: requester.'cr||cr
  90. gbuf=gbuf'If you are a Terminal user and are calling a system running a Porticus Shelter'cr
  91. gbuf=gbuf'Front-End, you may wish to rename the REQ file to Your_Name.GRAB. This will'cr
  92. gbuf=gbuf'permit you to automate your GRAB requests.'cr||cr
  93. gbuf=gbuf'@EndNode'cr
  94. gbuf=gbuf'@Node ABOUT "About 'system' and this Guide"'cr||cr
  95. call open('tbl', fileslist, 'W')
  96. call writech('tbl',gbuf||cr);drop gbuf
  97. call close('tbl')
  98.  
  99. if ~exists('htext') then do
  100.     if debug then call writeln(STDOUT,'Adding headerfile' htext 'to 'fileslist)
  101.     com='Type >> "'fileslist'" "'htext'"'
  102.     address COMMAND com
  103. end
  104. call open('tbl', fileslist, 'A')
  105. call writech('tbl','@EndNode'cr)
  106. call close('tbl')
  107.  
  108. gbuf=""
  109. do area=1 to areas by 2
  110.   a=area
  111.   gbuf=gbuf' @{" 'left_justify(name.a,35)' " link AREA'number.a'}'
  112.   a=a+1
  113.   if a<areas+1 then gbuf=gbuf' @{" 'left_justify(name.a,35)' " link AREA'number.a'}'||cr
  114. end
  115. call open('tbl', fileslist, 'A')
  116. call writech('tbl','@Node AREAS "File Area Descriptions"'cr||gbuf||cr'@EndNode'cr)
  117. drop gbuf
  118. call close('tbl')
  119.  
  120. do area=1 to areas
  121.     areadir=addslash(dequote(Path.area))
  122.     if debug then call writeln(STDOUT,'Updating area' Name.area)
  123.     call open('tbl', fileslist, 'A')
  124.     call writech('tbl','@Node AREA'number.area '"'name.area'"'cr)
  125.     call close('tbl')
  126.     call listandsort(areadir,areadir||filesbbs,LFMT_BBS)
  127.     call addareatext(areadir,areadir||filesbbs,areatext,areadir||filesbbs,'prepend')
  128.     call addheaders()    
  129.     call listandsort(areadir,tmpbbs,LFMT_LIST)
  130.     if ~open('ifn',tmpbbs,'R') then do
  131.         call writeln(STDOUT,'wraptofile:Cannot open 'tmpbbs)
  132.         signal cleanup
  133.     end
  134.     if ~open('ofn',fileslist,'A') then do
  135.         call writeln(STDOUT,'wraptofile:Cannot append Area List to 'fileslist)
  136.         signal cleanup
  137.     end
  138.     do while ~eof('ifn')
  139.         line=readln('ifn')
  140.         if left(line,1) ~= " " then call writech('ofn',' 'wrap_line(line,FLLEN,MARGINALL)) 
  141.         else call writech('ofn',line||cr)
  142.     end /*eof */
  143.     call writech('ofn','@EndNode'cr)
  144.   
  145.     call close('ifn')
  146.     call close('ofn')
  147. end
  148. /*address COMMAND 'Copy' fileslist allfileslist */
  149. call rename(fileslist,allfileslist)
  150. address COMMAND 'FileNote "'allfileslist'" "'listnote'"'  
  151.  
  152. call writeln(STDOUT,'Archiving 'allfileslist' as 'allfilesarc)
  153. call delete(allfilesarc)
  154. address COMMAND 'lha -2 u "'allfilesarc'" "'allfileslist'"'
  155. address COMMAND 'FileNote "'allfilesarc'" "'listnote'"'
  156. call writeln(STDOUT,' File Listing completed')
  157. cleanup:
  158. call delete(allfileslist)
  159. call delete(tmpbbs)
  160. exit 0
  161.    
  162. listandsort:
  163. /* list <tdir> with <lfmt> and sort to <tfile> */
  164. tdir=arg(1);tfile=arg(2);lfmt=arg(3)
  165. las='PIPE LIST 'tdir||exclude' FILES NOHEAD LFORMAT 'lfmt' | SORT In: 'tfile
  166. address command las
  167. return 0
  168.  
  169. /* prepend area.text to files.bbs                               */
  170. /*    addareatext(areadir,files.bbs,area.text,output)           */
  171. /*    addareatext(areadir,files.bbs,area.text,output,where)     */
  172. /* where= append or prepend(DEFAULT)                            */
  173. /*  example:                                                    */
  174. /*    call addareatext(Path.area,availlist,areatext,availlist)  */
  175. addareatext:
  176. descfile=addslash(dequote(arg(1)))||arg(3)
  177. inlist=arg(2);tolist=arg(4);where=arg(5)
  178. if ~exists(inlist) then do
  179.     call writeln(STDOUT,'addareatext: cannot find 'inlist)
  180.     return 20
  181. end
  182.  
  183. if ~exists(descfile) then do
  184.     call writeln(STDOUT,'addareatext: cannot find 'descfile' using 'default)
  185.     if where='append' then do
  186.         call open('ds',descfile,'A')
  187.         call writech('ds',default)
  188.     end;else do
  189.         call open('ds',descfile,'W')
  190.         call writech('ds',default)
  191.     end
  192.     call close('ds')  
  193. end
  194. if where='append' then call join(inlist,descfile,tolist)
  195.     else call join(descfile,inlist,tolist)
  196. return 0
  197.  
  198. wrap_line:
  199. text=arg(1)
  200. right_edge=arg(2)           /* line length */
  201. left_edge=arg(3)+2          /*   margin    */
  202. new_text=''
  203. do while length(text) > 0
  204.     broken_word=0
  205.     if length(text) < right_edge then do
  206.         new_text=new_text||text||'0a'x
  207.         text=''
  208.     end;else do
  209.         temp_text=strip(text,l)
  210.         diff=length(text) - length(temp_text)
  211.         first_break=lastpos(' ',temp_text,right_edge - diff)
  212.         break_point=first_break + diff
  213.         if left_edge=break_point then do
  214.             break_point=right_edge - 1
  215.             broken_word=1
  216.         end
  217.         new_text=new_text||strip(left(text,break_point),t)
  218.         if broken_word then do
  219.             new_text=new_text||'-'
  220.         end
  221.         new_text=new_text||'0a'x
  222.         text=copies(' ',left_edge)||strip(right(text,length(text) - break_point),l)
  223.     end
  224. end
  225. parse var new_text fn therest
  226. return '@{"'fn'" System "Echo >>'reqfile fn'"}' therest
  227.  
  228. /*
  229.     join -- a 'front end' for join. Fixes a problem with join.
  230.     uses a tempfile if target filename is same as one to cat
  231. */
  232. join:
  233. x=arg(1)' 'arg(2)' 'arg(3)
  234. temp='arexxtempfile'
  235. do i=1 to (words(x)-1)
  236.     if word(x,i)=word(x,words(x)) then do
  237.         oops=word(x,words(x))
  238.         x=delword(x,words(x))||'TO '||temp
  239.         address COMMAND 'Join' x
  240.         address COMMAND 'Copy 'temp' 'oops
  241.         call delete(temp)
  242.         return 0
  243.     end
  244. end
  245. x=arg(1)' 'arg(2)' TO 'arg(3)
  246. address COMMAND 'Join' x
  247. return 0
  248.  
  249. addslash:
  250. curr=arg(1)
  251. select
  252.     when right(curr, 1)=":" then nop
  253.         when right(curr, 1)="/" then nop
  254.             otherwise curr=curr"/"
  255. end
  256. return curr
  257.  
  258. /* a useful procedure by Walt Sullivan  */
  259. dequote:
  260. parse arg thing
  261. parse var thing '"' unq_thing '"'
  262. if unq_thing ~= "" then return unq_thing
  263. return thing
  264.  
  265. halt:
  266. ioerr:
  267. break_c:
  268. break_d:
  269. call writech(stdout,cr)
  270. call cleanup()
  271. exit 10
  272.  
  273. addheaders:
  274.     call writeln(STDOUT,'Appending 'areadir Number.area Name.area' to 'fileslist)
  275.     tbuf=CR||CR||center("AREA: "Number.Area,79)||CR||center(Name.Area,79)||CR||CR
  276.  
  277.     if debug then call writeln(STDOUT,'Adding Area Banner to 'fileslist)
  278.     if ~open('tbl', fileslist, 'A') then do
  279.         call writeln(STDOUT,'Cannot append Area Header to 'fileslist)
  280.         signal cleanup
  281.     end
  282.     call writech('tbl',tbuf)
  283.     close('tbl');drop tbuf
  284.     if exists(areadir||areatext) then do
  285.         if debug then call writeln(STDOUT,'Adding Area description to 'fileslist)
  286.         com='Type >> "'fileslist'" "'areadir||areatext'"'
  287.         address COMMAND com
  288.     end
  289. return
  290.  
  291. /* align text to left of field  adding spaces or trucating on right to fit   */
  292. left_justify:
  293.     if length(arg(1)) > arg(2) then return (left(arg(1),arg(2)))
  294.         else return (arg(1)||copies(" ",arg(2)-length(arg(1))))
  295.  
  296.  
  297.  
  298.  
  299.  
  300.